AWS Security Hub の自動修復ソリューションの既存の修復処理をカスタマイズしてみた
AWS事業本部 梶原@福岡です。
SecurityHubの自動修復ソリューションの公開されているGitHubの手順(下記)にしたがって既存の処理のカスタマイズを行ってみました。
https://github.com/aws-solutions/aws-security-hub-automated-response-and-remediation
事前準備
a Linux client with the following software
- AWS CLI v2
- Python 3.7+ with pip
- AWS CDK 1.155.0+
- Node.js with npm
が必要となります。事前にインストールまた環境構築を行っておきます。
また、展開時にS3バケットが最低2つ(本体とリージョン毎)で必要になります。
バージョン確認
AWS CLI
$ aws --version aws-cli/2.5.3 Python/3.9.12 Linux/5.10.102.1-microsoft-standard-WSL2 source/x86_64.ubuntu.18 prompt/off
Python
$ python3 -m venv .venv $ source .venv/bin/activate $ python --version Python 3.9.12
Node(NVM)
$ nvm install --lts $ nvm use 16 Now using node v16.18.0 (npm v8.19.2) $ node --version v16.18.0
ソースの取得
適当なディレクトリを作成し、その中でソースを取得してビルドを行います。
$ git clone https://github.com/aws-solutions/aws-security-hub-automated-response-and-remediation.git $ cd aws-security-hub-automated-response-and-remediation/
ビルド
一旦、正常にビルドできるかやってみます。
マシンパワーもよりますがわりと時間がかかりますので気長にお待ち下さい
この時に指定したバケットでテンプレート展開時に参照するバケットとなりますのでメモしておきます。
ここではバケットに”my-solution” を指定としていますが、実際作成するS3バケットは
- my-solution-reference
- my-solution-us-east-1
(後半はリージョン名)
という名前のバケットが必要になります。また自動修復ソリューションを展開するリージョン毎に必要になるので、必要に応じて作成してください
ビルドの実施
$ cd deployment/ $ chmod +x build-s3-dist.sh # ./build-s3-dist.sh -b source-bucket-base-name solution-name version-code $ ./build-s3-dist.sh -b my-solution
※ソリューション名, バージョンコードを省略するとダウンロードしてきたソースのバージョンになります
デフォルト値はそれぞれ
- ソリューション名: aws-security-hub-automated-response-and-remediation
- version-code (source\package.json のバージョン番号)
- 現在の最新は”v1.5.0”
実行ログ(抜粋)
prepend v to 1.5.0 ========================================================================== Building AWS Security Hub Automated Response & Remediation (SO0111) version v1.5.0 for bucket my-solution ========================================================================== ------------------------------------------------------------------------------ [Init] Clean old dist, node_modules and bower_components folders ------------------------------------------------------------------------------ ・・・省略 ------------------------------------------------------------------------------ [Init] Create folders ------------------------------------------------------------------------------ ・・・省略 ------------------------------------------------------------------------------ [Install] CDK ------------------------------------------------------------------------------ ・・・省略 ------------------------------------------------------------------------------ [Pack] Lambda Layer (used by playbooks) ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ [Pack] Member Stack Lambda Layer (used by custom resources) ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ [Pack] Custom Action Lambda ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ [Pack] Updatable Runbook Provider Lambda ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ [Create] Playbooks ------------------------------------------------------------------------------ Create AFSBP playbook
正常にビルドが行えますとdeploymentフォルダ配下に
global-s3-assets, reginal-s3-assets が作成されその中にテンプレート等が保存されますので
確認してください
※エラー等が途中で発生している場合、空のファイルが作成されていたりするのでご注意ください
カスタマイズ
それでは実際に修正してみます
RDS.2 の コントロールを検知した際に実行されるプレイブックを変更してみます。
詳細はこちらのエントリーに記載されていますが自動修復ソリューションで検知した際に
DBインスタンスを作成時の修復を想定されたステップになっていない為
ステータスがAvailableになるまで待機する処理を追加して、パブリックアクセスを無効にするように変更します。
Configルールを使ってパブリックアクセスが有効になっているRDSのDBインスタンスを自動修復する | DevelopersIO
対象のソースは下記になります。
source\remediation_runbooks\DisablePublicAccessToRDSInstance.yaml
こちらに以下の作成時の待機処理を追加します
index c1f8c72..496467a 100644 --- a/source/remediation_runbooks/DisablePublicAccessToRDSInstance.yaml +++ b/source/remediation_runbooks/DisablePublicAccessToRDSInstance.yaml @@ -47,6 +47,21 @@ mainSteps: - Name: DbInstanceIdentifier Selector: $.DBInstances[0].DBInstanceIdentifier Type: String + - + name: WaitForDBInstanceStatusToAvailable + action: "aws:waitForAwsResourceProperty" + timeoutSeconds: 1200 + isEnd: false + description: | + ## WaitForDBInstanceStatusToAvailable + Waits for the DB instance to change to a AVAILABLE state. + inputs: + Service: rds + Api: DescribeDBInstances + DBInstanceIdentifier: "{{ GetRDSInstanceIdentifier.DbInstanceIdentifier }}" + PropertySelector: "$.DBInstances[0].DBInstanceStatus" + DesiredValues: + - "available" - name: VerifyDBInstanceStatus action: "aws:assertAwsResourceProperty"
Build
ビルドを実施し、正常終了すると下記パスのプレイブックが変更されて生成されます
deployment\temp\source\remediation_runbooks\DisablePublicAccessToRDSInstance.yaml
最終的には上記のプレイブックはメンバーアカウントに展開させる修復用のプレイブックの
テンプレートに反映されます。
deployment\global-s3-assets\aws-sharr-remediations.template
展開準備
2つのS3バケットを作成し、作成したソース(テンプレート)を配置します
deploymentフォルダののglobal-s3-assets, regional-s3-assets の中身をS3バケットにコピーします
また、配置先は
s3://backet/ソユーション名/バージョン/
となります。こちらは./build-s3-dist.sh で指定することも可能ですのでカスタマイズする場合はビルド時に指定してください
S3バケット作成(テンプレート用)
aws s3 mb s3://my-solution-reference
テンプレート配置
aws s3 sync global-s3-assets/ s3://my-solution-reference/aws-security-hub-automated-response-and-remediation/v1.5.0/
S3バケット作成(Lambda用 東京リージョン)
aws s3 mb s3://my-solution-ap-northeast-1
Lambda用のzip配置
aws s3 sync regional-s3-assets/ s3://my-solution-ap-northeast-1/aws-security-hub-automated-response-and-remediation/v1.5.0/
テンプレートの展開
使用するテンプレートを今回ビルドしたテンプレートに置き換えて自動修復ソリューションのCloudFormationのスタックを展開します。
なお、CloudFormationからアクセスする際にPublicのアクセスまたは適切な公開設定を実施していないとテンプレートが見つからない旨のメッセージでエラーが発生します。
とくにテンプレート自体には機密情報は含まれないとおもいますがご注意ください
展開先のバケットを my-solution とした場合、それぞれの対応は下記になります
テンプレート | 通常 | カスタマイズしたテンプレートの場合 |
---|---|---|
aws-sharr-deploy.template | https://solutions-reference.s3.amazonaws.com/aws-security-hub-automated-response-and-remediation/latest/aws-sharr-deploy.template | https://my-solution--reference/aws-security-hub-automated-response-and-remediation/v1.5.0/aws-sharr-deploy.template |
aws-sharr-member.template | https://solutions-reference.s3.amazonaws.com/aws-security-hub-automated-response-and-remediation/latest/aws-sharr-member.template | https://my-solutions-reference.s3.amazonaws.com/aws-security-hub-automated-response-and-remediation/v1.5.0/aws-sharr-member.template |
まとめ
AWS Security Hub の自動修復ソリューションの変更をおこなってみました。
単純に使用するだけであれば、すでに公開されているテンプレートを使用すれば問題ないですが、一部修正したい。また現在対応していない独自のSecurityHubのコントロールの自動修復処理を追加する際になどに参考になると幸いです
参考
https://github.com/aws-solutions/aws-security-hub-automated-response-and-remediation